home *** CD-ROM | disk | FTP | other *** search
- #include "Main.h"
- #include "text.h"
- #include "protos.h"
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <dos/dos.h>
- #include <proto/exec.h>
- #include <proto/intuition.h>
- #include <proto/gadtools.h>
- #include <proto/keymap.h>
- #include <proto/graphics.h>
- #include <proto/reqtools.h>
- #include <libraries/reqtools.h>
- #include <graphics/gfxmacros.h>
- #include <exec/memory.h>
- #include <intuition/gadgetclass.h>
-
-
- UBYTE NiveauCourant=4;
- extern UBYTE ListeCoup[XMAX*YMAX+1];
- UWORD CoorX[XMAX+1],CoorY[YMAX+1];
-
- struct ReqToolsBase *ReqToolsBase;
- struct Library *GadToolsBase;
- struct IntuitionBase *IntuitionBase;
- struct Library *KeymapBase;
- struct GfxBase *GfxBase ;
-
- #define BEEP DisplayBeep(Ecran);
- #define U_N (GT_Underscore),'_'
-
- struct Screen *Ecran=NULL;
- APTR VisualInfo=NULL;
- struct Window *Fenetre=NULL;
- struct Gadget *GadgetsListe=NULL;
- struct Menu *MenusListe=NULL;
- struct Gadget *Gadget[NBGADGETS];
- struct RastPort *Rastport;
-
- UWORD FenLeft=108,FenTop=15,FenWidth=497,FenHeight=147;
- UBYTE *FenetreTitre=TITRE;
- ULONG flag=WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_REPORTMOUSE|WFLG_GIMMEZEROZERO|WFLG_ACTIVATE;
- ULONG idcmp=IDCMP_GADGETUP|IDCMP_MENUPICK|IDCMP_MOUSEBUTTONS|IDCMP_RAWKEY|IDCMP_CLOSEWINDOW;
-
- UWORD Correction=1;
- char drapeau;
-
- UBYTE *Niveaux[]={"1","2","3",NULL};
-
- struct TextAttr topaz8={"topaz.font",8,0x00,0x01};
-
- struct NewMenu Menu[]={
- NM_TITLE,PROJET,NULL,0,NULL,NULL,
- NM_ITEM,INFOS,INF,0,0,(APTR)Infos,
- NM_ITEM,NM_BARLABEL,NULL,0,0,NULL,
- NM_ITEM,QUITTE,QUI,0,0,(APTR)Quitte,
- NM_END,NULL,NULL,0,0,NULL
- };
-
- UWORD FGTypes[]={
- CYCLE_KIND,
- TEXT_KIND,
- BUTTON_KIND,
- BUTTON_KIND,
- BUTTON_KIND,
- BUTTON_KIND
- };
-
- struct NewGadget NewGadget[]={
- 400,10,61,11,NIVEAU,NULL,0,PLACETEXT_LEFT,NULL,(APTR)Niveau,
- 2,118,480,11,NULL,NULL,1,0,NULL,NULL,
- 360,42,85,11,COMMENCE,NULL,2,PLACETEXT_IN,NULL,(APTR)Commence,
- 360,54,85,11,ARRETE,NULL,3,PLACETEXT_IN,NULL,(APTR)Arrete,
- 360,66,84,11,QUITTE_G,NULL,4,PLACETEXT_IN,NULL,(APTR)Quitte,
- 360,85,84,11,RETOUR,NULL,5,PLACETEXT_IN,NULL,(APTR)Retour,
- TAG_DONE
- };
-
- ULONG GadgetTag[]={
- GTCY_Labels,(ULONG)Niveaux,GTCY_Active,1,U_N,TAG_DONE,
- GTTX_Text,(ULONG)BONJOUR,GTTX_Border,1,TAG_DONE,
- U_N,TAG_DONE,
- U_N,GA_Disabled,1,TAG_DONE,
- U_N,TAG_DONE,
- U_N,GA_Disabled,1,TAG_DONE
- };
-
- int InitEcran(void)
- {
- if(!(Ecran=LockPubScreen("Workbench")))
- return(1L);
- if(!(VisualInfo=GetVisualInfo(Ecran,TAG_DONE)))
- return(2L);
- return(0);
- }
-
- void FermeEcran(void)
- {
- if(VisualInfo)
- {
- FreeVisualInfo(VisualInfo);
- VisualInfo=NULL;
- }
- if(Ecran)
- {
- UnlockPubScreen(NULL,Ecran);
- Ecran=NULL;
- }
- }
-
- void UpdateBevel(void)
- {
- UWORD offx,offy,i;
- UWORD Pattern[]={0xAAAA,0x5555};
-
- offx=Fenetre->BorderLeft;
- offy=Fenetre->BorderTop;
-
- DrawBevelBox(Rastport,offx+348,offy+38,109,65,GT_VisualInfo,VisualInfo,GTBB_Recessed,1,TAG_DONE);
- DrawBevelBox(Rastport,offx+16,offy-2,297,113*Correction,GT_VisualInfo,VisualInfo,TAG_DONE);
- DrawBevelBox(Rastport,offx+20,offy,289,109*Correction,GT_VisualInfo,VisualInfo,GTBB_Recessed,1,TAG_DONE);
- SetAfPt(Rastport,Pattern,1);
- SetAPen(Rastport,3);
- RectFill(Rastport,offx+350,offy+39,offx+455,offy+100);
- RefreshGadgets(GadgetsListe,Fenetre,NULL);
- SetAPen(Rastport,1);
- for(i=0;i<=XMAX;i++)
- {
- CoorX[i]=offx+VS+i*TN+1+(TN>>1);
- if(i<=YMAX)
- CoorY[i]=offy+(CC-((i*(TN-5))>>1)-((TN-5)>>2)+2)*Correction;
-
- Move(Rastport,offx+VS+i*TN,offy+CI);
- Draw(Rastport,offx+VS+i*TN,offy+CC*Correction);
- Move(Rastport,offx+VS+1+i*TN,offy+CI);
- Draw(Rastport,offx+VS+1+i*TN,offy+CC*Correction);
- }
- }
-
- void GereEvenements(void)
- {
- struct MenuItem *ItemMenu;
- UBYTE buffer[80];
- UWORD i,actual;
- struct InputEvent Clavier;
- void (*func)(void);
- struct IntuiMessage *Message;
- struct IntuiMessage Msg;
-
- Wait(1<<Fenetre->UserPort->mp_SigBit);
- while(Message=GT_GetIMsg(Fenetre->UserPort))
- {
- Msg=*Message;
- GT_ReplyIMsg(Message);
- switch(Msg.Class)
- {
- case IDCMP_CLOSEWINDOW:
- drapeau=1;
- Quitte();
- break;
-
- case IDCMP_RAWKEY:
- Clavier.ie_Qualifier=Msg.Qualifier;
- if(Clavier.ie_Qualifier&IEQUALIFIER_RCOMMAND)
- {
- Clavier.ie_Class=IECLASS_RAWKEY;
- Clavier.ie_SubClass=0;
- Clavier.ie_Code=Msg.Code;
- Clavier.ie_EventAddress=(APTR *)*((ULONG *)Msg.IAddress);
- actual=MapRawKey(&Clavier,buffer,80,NULL);
- for(i=0;i<actual;i++)
- switch(buffer[i])
- {
- case COM:
- if(Enabled(Gadget[2]))
- Commence();
- break;
- case ARR:
- if(Enabled(Gadget[3]))
- Arrete();
- break;
- case RET:
- if(Enabled(Gadget[5]))
- Retour();
- break;
- case NIV:
- if(Enabled(Gadget[0]))
- CycleNiveau();
- break;
- }
- }
- break;
-
- case IDCMP_MOUSEBUTTONS:
- if(Msg.Code==SELECTDOWN)
- Souris();
- break;
-
- case IDCMP_GADGETUP:
- func=(void *)(((struct Gadget *)Msg.IAddress)->UserData);
- (func)();
- break;
-
- case IDCMP_MENUPICK:
- drapeau=0;
- while(Msg.Code!=MENUNULL)
- {
- ItemMenu=ItemAddress(MenusListe,Msg.Code);
- func=(void *)(GTMENUITEM_USERDATA(ItemMenu));
- (func)();
- Msg.Code=ItemMenu->NextSelect;
- }
- break;
- }
- }
- }
-
- char GereEvenementsLight(void)
- {
- struct IntuiMessage *Message;
- char buffer[80];
- UWORD i,actual;
- struct InputEvent Clavier;
-
- while(Message=GT_GetIMsg(Fenetre->UserPort))
- {
- GT_ReplyIMsg(Message);
- switch(Message->Class)
- {
- case IDCMP_RAWKEY:
- Clavier.ie_Qualifier=Message->Qualifier;
- if(Clavier.ie_Qualifier&IEQUALIFIER_RCOMMAND)
- {
- Clavier.ie_Class=IECLASS_RAWKEY;
- Clavier.ie_SubClass=0;
- Clavier.ie_Code=Message->Code;
- Clavier.ie_EventAddress=(APTR *)*((ULONG *)Message->IAddress);
- actual=MapRawKey(&Clavier,buffer,80,NULL);
- for(i=0;i<actual;i++)
- if(buffer[i]==ARR)
- return(1);
- }
- break;
- case IDCMP_GADGETUP:
- if(((struct Gadget *)Message->IAddress)->GadgetID==3);
- return(1);
- break;
- }
- }
- return(0);
- }
-
- int OuvreFenetre(void)
- {
- struct Gadget *g;
- UWORD lc,tc;
- UWORD offx=Ecran->WBorLeft,offy=Ecran->WBorTop+Ecran->RastPort.TxHeight+1;
-
- if(!(g=CreateContext(&GadgetsListe)))
- return(1L);
-
- for(lc=0,tc=0;;lc++)
- {
- if(!NewGadget[lc].ng_LeftEdge)
- break;
-
- NewGadget[lc].ng_VisualInfo=VisualInfo;
- NewGadget[lc].ng_TextAttr=&topaz8;
- NewGadget[lc].ng_LeftEdge+=offx;
- NewGadget[lc].ng_TopEdge+=offy;
-
- if((Correction==2)&&(lc==1))
- NewGadget[1].ng_TopEdge<<=1;
- Gadget[lc]=g=CreateGadgetA((ULONG)FGTypes[lc],g,&NewGadget[lc],(struct TagItem *)&GadgetTag[tc]);
-
- while(GadgetTag[tc])
- tc+=2;
- tc++;
-
- if(!g)
- return(2L);
- }
-
- if(!(MenusListe=CreateMenus(Menu,GTMN_FrontPen,0,TAG_DONE)))
- return(3L);
-
- LayoutMenus(MenusListe,VisualInfo,GTMN_TextAttr,&topaz8,TAG_DONE);
-
- if(!(Fenetre=OpenWindowTags(NULL,
- WA_Left,FenLeft,
- WA_Top,FenTop,
- WA_Width,FenWidth,
- WA_Height,FenHeight*Correction+offy,
- WA_IDCMP,idcmp^IDCMP_MOUSEBUTTONS,
- WA_Flags,flag,
- WA_Gadgets,GadgetsListe,
- WA_Title,FenetreTitre,
- WA_ScreenTitle,NULL,
- WA_PubScreen,Ecran,
- TAG_DONE)))
- return(4L);
-
- Rastport=Fenetre->RPort;
- SetMenuStrip(Fenetre,MenusListe);
-
- GT_RefreshWindow(Fenetre,NULL);
- UpdateBevel();
- return(0);
- }
-
- void FermeFenetre(void)
- {
- if(MenusListe)
- {
- ClearMenuStrip(Fenetre);
- FreeMenus(MenusListe);
- MenusListe=NULL;
- }
- if(Fenetre)
- {
- CloseWindow(Fenetre);
- Fenetre=NULL;
- }
- if(GadgetsListe)
- {
- FreeGadgets(GadgetsListe);
- GadgetsListe=NULL;
- }
- }
-
- void CycleNiveau(void)
- {
- struct TagItem tk[]={GTCY_Active,0,TAG_DONE};
-
- Niveau();
- tk[0].ti_Data=(NiveauCourant>>1)-1;
- GT_SetGadgetAttrsA(Gadget[0],Fenetre,NULL,tk);
- RefreshGList(Gadget[0],Fenetre,NULL,1);
- }
-
- void Niveau(void)
- {
- NiveauCourant%=6;
- NiveauCourant+=2;
- }
-
- void Affiche(char *txt)
- {
- struct TagItem tk[]={GTTX_Text,0,TAG_DONE};
-
- tk[0].ti_Data=(ULONG)txt;
- GT_SetGadgetAttrsA(Gadget[1],Fenetre,NULL,tk);
- }
-
- void Quitte(void)
- {
- struct TagItem tk[]={RT_Window,NULL,RTEZ_ReqTitle,(ULONG)QUI_TIT,RT_ReqPos,REQPOS_CENTERSCR,RTEZ_Flags,EZREQF_CENTERTEXT,TAG_DONE};
-
- tk[0].ti_Data=(ULONG)Fenetre;
- if((drapeau)||(rtEZRequestA(QUI_TXT,QUI_REP,NULL,NULL,tk)))
- {
- FermeFenetre();
- FermeEcran();
- exit(RETURN_OK);
- }
- }
-
- void Infos(void)
- {
- ULONG pipo[2];
- struct TagItem tk[]={RT_Window,NULL,RTEZ_ReqTitle,(ULONG)OUI_TIT,RT_ReqPos,REQPOS_CENTERSCR,RTEZ_Flags,EZREQF_CENTERTEXT,TAG_DONE};
-
- pipo[0]=AvailMem(MEMF_LARGEST|MEMF_CHIP);
- pipo[1]=AvailMem(MEMF_LARGEST|MEMF_FAST);
- tk[0].ti_Data=(ULONG)Fenetre;
- rtEZRequestA(OUI_TXT,OUI_REP,NULL,pipo,tk);
- RefreshGList(Gadget[1],Fenetre,NULL,1);
- }
-
- int main()
- {
- int a,b;
- static UBYTE version[]=VERSION;
-
- if(!(GadToolsBase=(struct Library *)OpenLibrary("gadtools.library",VER_LIB)))
- {
- printf("%s gadtools.library v%d",VER_PBM,VER_LIB);
- exit(RETURN_ERROR);
- }
- if(!(KeymapBase=(struct Library *)OpenLibrary("keymap.library",VER_LIB)))
- {
- printf("%s keymap.library v%d",VER_PBM,VER_LIB);
- exit(RETURN_ERROR);
- }
- if(!(GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",VER_LIB)))
- {
- printf("%s graphics.library v%d",VER_PBM,VER_LIB);
- exit(RETURN_ERROR);
- }
- if(!(IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",VER_LIB)))
- {
- printf("%s intuition.library v%d",VER_PBM,VER_LIB);
- exit(RETURN_ERROR);
- }
- if(!(ReqToolsBase=(struct ReqToolsBase*)OpenLibrary("reqtools.library",VER_LIB)))
- {
- printf("%s reqtools.library v%d",VER_PBM,VER_LIB);
- exit(RETURN_ERROR);
- }
- if(a=InitEcran())
- {
- printf("%s InitEcran. Erreur %d\n",VER_PBM,a);
- exit(RETURN_ERROR);
- }
- if(Ecran->Height>350)
- Correction=2;
- if(b=OuvreFenetre())
- {
- FermeEcran();
- printf("%s OuvreFenetre. Erreur %d\n",VER_PBM,a);
- exit(RETURN_ERROR);
- }
- Init();
- Commence();
- for(;;)
- GereEvenements();
- }
-